package com.cinema.service;

import com.cinema.entity.user.AbstractUser;
import com.cinema.entity.user.FrontDeskUser;
import com.cinema.entity.user.ManagerUser;
import com.cinema.util.DataStore;
import com.cinema.util.InputUtil;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Scanner;

/**
 * 用户服务类，处理用户相关业务逻辑
 */
public class UserService {
    private final DataStore dataStore = DataStore.getInstance();
    private final List<AbstractUser> userList = dataStore.getUserList();
    private final Scanner scanner = new Scanner(System.in);

    /**
     * 用户登录
     */
    public AbstractUser login(String username, String password) {
        for (AbstractUser user : userList) {
            if (user.getUsername().equals(username) && user.getPassword().equals(password)) {
                return user;
            }
        }
        return null; // 登录失败
    }

    /**
     * 列出所有用户
     */
    public void listAllUsers() {
        if (userList.isEmpty()) {
            System.out.println("❌ 暂无用户数据");
            return;
        }

        System.out.println("\n===== 用户列表 =====");
        System.out.println("ID\t用户名\t类型\t创建时间");
        for (AbstractUser user : userList) {
            System.out.printf("%s\t%s\t%s\t%s%n",
                    user.getUserId(),
                    user.getUsername(),
                    user.getUserType(),
                    user.getCreateTime().toLocalDate());
        }
    }

    /**
     * 添加新用户
     */
    public void addNewUser() {
        System.out.println("\n===== 添加新用户 =====");
        System.out.println("1. 经理");
        System.out.println("2. 前台");
        System.out.print("请选择用户类型：");
        int type = InputUtil.getValidInt();

        System.out.print("请输入用户名：");
        String username = InputUtil.getValidString();

        // 校验用户名是否已存在
        for (AbstractUser user : userList) {
            if (user.getUsername().equals(username)) {
                System.out.println("❌ 用户名已存在");
                return;
            }
        }

        System.out.print("请输入联系电话：");
        String phone = InputUtil.getValidString();

        // 生成用户ID
        String prefix = type == 1 ? "MG" : "FD";
        String userId = prefix + String.format("%03d", userList.size() + 1);

        // 创建用户（初始密码123456）
        AbstractUser newUser;
        if (type == 1) {
            newUser = new ManagerUser(
                    userId, username, "123456",
                    LocalDateTime.now(), "经理", phone
            );
        } else {
            newUser = new FrontDeskUser(
                    userId, username, "123456",
                    LocalDateTime.now(), "前台", phone
            );
        }

        userList.add(newUser);
        dataStore.updateUserList();
        System.out.println("✅ 用户添加成功，初始密码：123456");
    }

    /**
     * 删除用户
     */
    public void deleteUser() {
        System.out.print("请输入要删除的用户ID：");
        String userId = InputUtil.getValidString();

        // 不能删除管理员
        if (userId.startsWith("AD")) {
            System.out.println("❌ 不能删除管理员用户");
            return;
        }

        for (int i = 0; i < userList.size(); i++) {
            if (userList.get(i).getUserId().equals(userId)) {
                userList.remove(i);
                dataStore.updateUserList();
                System.out.println("✅ 用户删除成功");
                return;
            }
        }

        System.out.println("❌ 用户ID不存在");
    }

    /**
     * 更新用户信息
     */
    public void updateUser(AbstractUser user) {
        for (int i = 0; i < userList.size(); i++) {
            if (userList.get(i).getUserId().equals(user.getUserId())) {
                userList.set(i, user);
                dataStore.updateUserList();
                return;
            }
        }
    }
}
